package jade.imtp.leap.http;

import jade.imtp.leap.JICP.JICPPacket;
import jade.imtp.leap.JICP.JICPProtocol;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 *
 * @author Eduard Drenth: Logica, 21-sep-2009
 * 
 */
public class HTTPHelper {
    public static final String RECIPIENT_ID_FIELD = "recipient-id";

    public HTTPHelper() {
    }

    //#MIDP_EXCLUDE_BEGIN
    /**
     * @see HTTPHelper#readPacketFromHttp(java.io.InputStream)
     */
    public static JICPPacket readPacketFromHttp(byte[] input) throws IOException {
        return readPacketFromHttp(new ByteArrayInputStream(input));
    }

    public static JICPPacket readPacketFromHttp(InputStream is) throws IOException {
        HTTPRequest request = new HTTPRequest();
        request.readFrom(is);
        if (request.getMethod().equals("GET")) {
            // This is a CONNECT_MEDIATOR
            String recipientID = request.getField(RECIPIENT_ID_FIELD);
            JICPPacket pkt = new JICPPacket(JICPProtocol.CONNECT_MEDIATOR_TYPE, JICPProtocol.DEFAULT_INFO, recipientID, null);
            return pkt;
        } else {
            // Read the JICPPacket from the HTTP request payload
            ByteArrayInputStream bis = new ByteArrayInputStream(request.getPayload());
            return JICPPacket.readFrom(bis);
        }
    }
    public static HTTPResponse wrapInHttp(byte[] jicpPacket) throws IOException {
        // Create an HTTPResponse and set the serialized JICPPacket as payload
        HTTPResponse response = new HTTPResponse();
        response.setCode("200");
        response.setMessage("OK");
        response.setHttpType("HTTP/1.1");
        response.setPayload(jicpPacket);
        return response;
    }
    
    public static HTTPResponse wrapInHttp(JICPPacket pkt) throws IOException {
        ByteArrayOutputStream os = new ByteArrayOutputStream(pkt.getLength());
        pkt.writeTo(os);
        return wrapInHttp(os.toByteArray());
    }
    //#MIDP_EXCLUDE_END
}
